/**
 * 
 */
package com.lifeware.research.endo.services;

import java.util.List;

import org.springframework.stereotype.Component;

import com.lifeware.research.endo.Constants;
import com.lifeware.research.endo.models.SchedaBaseSummary;
import com.lifeware.research.endo.models.dao.IGhiandoleDao;
import com.lifeware.research.endo.models.dao.IMmPazienteGhiandolaMalattiaDao;
import com.lifeware.research.endo.models.dao.IPazientiDao;
import com.lifeware.research.endo.models.entities.AcromegaliaSchedeBase;
import com.lifeware.research.endo.models.entities.Ghiandole;
import com.lifeware.research.endo.models.entities.MmPazienteGhiandolaMalattia;
import com.lifeware.research.endo.models.entities.Pazienti;
import com.lifeware.research.endo.views.PazienteProxy;

/**
 * <p>Recupero le informazioni necessarie per la gestione dei pazienti.
 * </p>
 * 
 * @author  Riccardo Cardin, (C) 2012 Lifeware
 * @version 1.0
 */
@Component
public class PazienteService {

	private IGhiandoleDao ghiandoleDao;
	
	private IPazientiDao pazientiDao;

	private IMmPazienteGhiandolaMalattiaDao pazienteGhiandolaMalattiaDao;
	
	public List<Ghiandole> getGhiandole() {
		
		return this.ghiandoleDao.findAllGhiandole();
	}
	
	@SuppressWarnings("unchecked")
	public void inserisci(PazienteProxy pazienteProxy) {
		
		/* Recupero il paziente */
		Pazienti pazienti = pazienteProxy.getPaziente();
		
		/* Recupero la ghiandola corrispondente */
		Ghiandole ghiandola = 
				this.ghiandoleDao.findById(
						pazienteProxy.getGhiandola().getIdGhiandola());
		
		MmPazienteGhiandolaMalattia mmPazienteGhiandolaMalattia = 
			new MmPazienteGhiandolaMalattia();
		mmPazienteGhiandolaMalattia.setPazienti(pazienti);
		mmPazienteGhiandolaMalattia.setGhiandole(ghiandola);
				
		/* Recupero le malattie */
		AcromegaliaSchedeBase acromegalia = pazienteProxy.getAcromegaliaSB();
		if (acromegalia != null) {
			
			mmPazienteGhiandolaMalattia.setAcromegaliaSchedeBase(acromegalia);
			mmPazienteGhiandolaMalattia.setDescrizioneMalattia(
					Constants.ACROMEGALIA_DESCRIZIONE);
		}   // if (acromegalia != null)...
		
		pazienti.getMmPazienteGhiandolaMalattias().add(
				mmPazienteGhiandolaMalattia);
		
		/* Effettuo la persistenza */
		pazienti = this.pazientiDao.saveOrUpdate(pazienti);
		
		// TODO Modificare.
	}
	
	/**
	 * <p>Ritorna le informazioni riassuntive sulle schede base associate 
	 *    ad un paziente.
	 * </p>
	 * 
	 * @param paziente Il paziente per il quale estrarre le informazioni.
	 * 
	 * @return Le informazioni riassuntive sulle schede base.
	 */
	public List<SchedaBaseSummary> getSchedeBasePaziente(PazienteProxy paziente) {
		
		return this.pazienteGhiandolaMalattiaDao.findByPazienteIdentificativo(
				paziente.getIdentificativo());
	}
	
	public IGhiandoleDao getGhiandoleDao() {
		return ghiandoleDao;
	}

	public void setGhiandoleDao(IGhiandoleDao ghiandoleDao) {
		this.ghiandoleDao = ghiandoleDao;
	}

	public IPazientiDao getPazientiDao() {
		return pazientiDao;
	}

	public void setPazientiDao(IPazientiDao pazientiDao) {
		this.pazientiDao = pazientiDao;
	}

	public IMmPazienteGhiandolaMalattiaDao getPazienteGhiandolaMalattiaDao() {
		return pazienteGhiandolaMalattiaDao;
	}

	public void setPazienteGhiandolaMalattiaDao(
			IMmPazienteGhiandolaMalattiaDao pazienteGhiandolaMalattiaDao) {
		this.pazienteGhiandolaMalattiaDao = pazienteGhiandolaMalattiaDao;
	}
}
